package controller;

import java.sql.SQLException;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class GerarRelatorio {
    
    public repository.RelatorioDAO gerarRelatorio;
    
    public void query0(Date DataInicio, Date DataFim) throws SQLException {

        boolean validInicio = true;
        boolean validFim = true;
        
        if (DataInicio == null) {    // data de inicio e vazio
            validInicio = false;
        }
        if (DataFim == null) {       // data de fim e vazio
            validFim = false;
        }
        
        if ( validInicio && validFim && (DataFim.before(DataInicio)) ) {  // se a data de fim for menor q a de inicio
            JOptionPane.showMessageDialog(null, "Data de Inicio antes da data de Fim", "", JOptionPane.INFORMATION_MESSAGE);
            return;
        }
        
        String dtInicio = new String();
        if (validInicio) {
            dtInicio += DataInicio.getYear() + 1900 + "-";
            dtInicio += DataInicio.getMonth() + 1 + "-";
            dtInicio += DataInicio.getDate();
        }
        
        String dtFim = new String();
        if (validFim) {
            dtFim += DataFim.getYear() + 1900 + "-";
            dtFim += DataFim.getMonth() + 1 + "-";
            dtFim += DataFim.getDate();
        }
        
        String sql;
        
        if (validInicio && validFim) {      // Pesquisa entre duas datas
        
            sql =   "SELECT anoMesDia, valorTotal, descricao " + 
                    "FROM saida join conta on (saida.idConta = conta.idConta) " + 
                    "WHERE anoMesDia >= '" + dtInicio + "' AND anoMesDia <= '" + dtFim + "' " +
                    "UNION " +
                    "SELECT anoMesDia, valorTotal, descricao " +
                    "FROM Entrada " +
                    "WHERE anoMesDia >= '" + dtInicio + "' AND anoMesDia <= '" + dtFim + "'";
        }
        else {
            if (validInicio) {              // Pesquisa a partir de certa data
                sql =   "SELECT anoMesDia, valorTotal, descricao " + 
                    "FROM saida join conta on (saida.idConta = conta.idConta) " + 
                    "WHERE anoMesDia >= '" + dtInicio + "' " +
                    "UNION " +
                    "SELECT anoMesDia, valorTotal, descricao " +
                    "FROM Entrada " +
                    "WHERE anoMesDia >= '" + dtInicio + "'";
            }
            else {
                if (validFim) {             // pesquisa até uma data
                    sql =   "SELECT anoMesDia, valorTotal, descricao " + 
                    "FROM saida join conta on (saida.idConta = conta.idConta) " + 
                    "WHERE anoMesDia <= '" + dtFim + "' " +
                    "UNION " +
                    "SELECT anoMesDia, valorTotal, descricao " +
                    "FROM Entrada " +
                    "WHERE anoMesDia <= '" + dtFim + "'";
                }
                else {                      // pesquisa de tudo
                    sql =   "SELECT anoMesDia, valorTotal, descricao " + 
                    "FROM saida join conta on (saida.idConta = conta.idConta) " + 
                    "UNION " +
                    "SELECT anoMesDia, valorTotal, descricao " +
                    "FROM Entrada ";
                }
            }
        }
        
        if (!sql.isEmpty()){
            gerarRelatorio = new repository.RelatorioDAO(sql);
            gerarRelatorio.read();
        }
    }
}
